package com.haust.leyou.controller;

import com.haust.leyou.config.AliyunSmsPropertiesConfig;
import com.haust.leyou.service.AliyunSendSmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @Auther: csp1999
 * @Date: 2020/12/18/12:21
 * @Description: 阿里云SMS短信发送API(仅测试使用)
 */
@RestController
@Deprecated // 仅测试使用
public class AliyunSmsApiController {

    @Autowired
    private AliyunSendSmsService aliyunSendSmsService;

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private AliyunSmsPropertiesConfig aliyunSmsPropertiesConfig;

    /**
     * 短信发送
     *
     * @param phone
     * @return
     */
    @GetMapping("/send/{phone}")
    public String sendCode(@PathVariable("phone") String phone) {

        // 根据手机号从redis中拿验证码
        String code = redisTemplate.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)) {
            return phone + " : " + code + "已经存在，还没有过期！";
        }

        // 如果redis 中根据手机号拿不到验证码，则生成4位随机验证码
        code = UUID.randomUUID().toString().substring(0, 4);

        // 验证码存入codeMap
        Map<String, Object> codeMap = new HashMap<>();
        codeMap.put("code", code);

        // 调用aliyunSendSmsService发送短信
        Boolean bool = aliyunSendSmsService.sendMessage(phone, aliyunSmsPropertiesConfig.getTemplateCode(), codeMap);

        if (bool) {
            // 如果发送成功，则将生成的4位随机验证码存入redis缓存,5分钟后过期
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
            return phone + " ： " + code + "发送成功！";
        } else {
            return phone + " ： " + code + "发送失败！";
        }
    }
}
